package com.test.pojo.vo;

import lombok.Data;
import lombok.ToString;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Data
@ToString
public class UserInfoVo implements UserDetails {

    /**
     * 主键ID
     */
    private String id;
    /**
     * 用户账号
     */
    private String userName;
    /**
     * 登录密码
     */
    private String userPassword;
    /**
     * 用户编号
     */
    private String userCode;
    /**
     * 用户姓名
     */
    private String userRealname;
    /**
     * 昵称
     */
    private String petName;
    /**
     * 性别
     */
    private String sex;
    /**
     * 出生日期
     */
    private Date birthday;
    /**
     * 证件类型
     */
    private String idType;
    /**
     * 证件号码
     */
    private String idCard;
    /**
     * 手机号码
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 电话
     */
    private String tel;
    /**
     * 传真
     */
    private String faxNumber;
    /**
     * 单位ID
     */
    private String orgId;
    /**
     * 单位名称
     */
    private String orgName;
    /**
     * 上级单位名称
     */
    private String orgParentId;
    /**
     * 单位全称
     */
    private String orgAllname;
    /**
     * 单位层次码
     */
    private String orgCcm;
    /**
     * 头像地址
     */
    private String picpath;
    /**
     * 头像图片名称
     */
    private String picname;
    /**
     * 排序
     */
    private Integer paixu;
    /**
     * 状态
     */
    private String status;
    /**
     * 用户类型
     */
    private String userType;
    /**
     * 通过状态
     */
    private String approveStatus;
    /**
     * 微信id1
     */
    private String wxOpenid;
    /**
     * 微信id2
     */
    private String wxOpenid2;
    /**
     * 微信id3
     */
    private String wxOpenid3;
    /**
     * 微信id4
     */
    private String wxOpenid4;
    /**
     * 第三方编码
     */
    private String thirdCode;
    /**
     * 最后修改密码日期
     */
    private Date lastMoPassRq;
    /**
     * 最后登录时间
     */
    private Date lastLoginDate;
    /**
     * 最后登录IP
     */
    private String lastLoginIp;
    /**
     * 登录错误日期
     */
    private Date loginErrorDate;
    /**
     * 登录错误次数
     */
    private String loginErrorCount;
    /**
     * 是否是管理员修改密码
     */
    private String isAdminMoPass;
    /**
     * 是否允许登录系统
     */
    private String isAllowLoginSys;
    /**
     * 是否是微信管理员
     */
    private String isWxManager;
    /**
     * 扩展字段1
     */
    private String ext1;
    /**
     * 扩展字段2
     */
    private String ext2;
    /**
     * 扩展字段3
     */
    private String ext3;
    /**
     * 扩展字段4
     */
    private String ext4;
    /**
     * 扩展字段5
     */
    private String ext5;
    /**
     * 扩展字段6
     */
    private String ext6;
    /**
     * 扩展字段7
     */
    private String ext7;
    /**
     * 扩展字段8
     */
    private String ext8;
    /**
     * 扩展字段9
     */
    private String ext9;
    /**
     * 扩展字段10
     */
    private String ext10;
    /**
     * 扩展字段11
     */
    private String ext11;
    /**
     * 扩展字段12
     */
    private String ext12;
    /**
     * 扩展字段13
     */
    private String ext13;
    /**
     * 扩展字段14
     */
    private String ext14;
    /**
     * 扩展字段5
     */
    private String ext15;
    /**
     *
     */
    private String tenantId;
    /**
     *
     */
    private Long revision;
    /**
     *
     */

    private Integer dataEnable;
    /**
     *
     */
    private String creatorId;


    private String creator;
    /**
     *
     */
    private Date createTime;
    /**
     *
     */
    private String modifierId;
    /**
     *
     */
    private String modifier;
    /**
     *
     */
    private Date modifyTime;
    /**
     *
     */
    private String creatorOrgId;

    private List<String> roleList = new ArrayList<>(); // 角色列表
    private List<String> permissionList = new ArrayList<>(); // 权限列表

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authorities = new ArrayList<>();
        if (roleList != null) {
            for (String role : roleList) {
                authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
            }
        }
        if (permissionList != null) {
            for (String permission : permissionList) {
                authorities.add(new SimpleGrantedAuthority(permission));
            }
        }
        return authorities;
    }

    @Override
    public String getUsername() {
        return this.userName;
    }

    @Override
    public String getPassword() {
        return this.userPassword;
    }

    @Override
    public boolean isAccountNonExpired() {
        return !"1".equals(this.status); // 假设状态为 "1" 表示过期
    }

    @Override
    public boolean isAccountNonLocked() {
        return !"2".equals(this.status); // 假设状态为 "2" 表示锁定
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return !"3".equals(this.status); // 假设状态为 "3" 表示凭证过期
    }

    @Override
    public boolean isEnabled() {
        return "0".equals(this.status); // 假设状态为 "0" 表示启用
    }

    // Optional: You can add constructors, methods to set roles and permissions, etc.
}